package com.river;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;

/**
 * Created by jl on 2017/10/16.
 */
public class Producer {
    private static final String QUEUE_NAME = "river";

    public static void main(String[] args) throws IOException {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        // default exchange默认，向指定的队列发送消息，消息只会被一个consumer处理,多个消费者消息会轮训处理,消息发送时如果没有consumer，消息不会丢失
        //为消息通道绑定一个队列
        //队列的相关参数需要与第一次定义该队列时相同，否则会出错
        //参数1：队列名称
        //参数2：为true时server重启队列不会消失
        //参数3：队列是否是独占的，如果为true只能被一个connection使用，其他连接建立时会抛出异常
        //参数4：队列不再使用时是否自动删除（没有连接，并且没有未处理的消息)
        //参数5：建立队列时的其他参数
        channel.queueDeclare(QUEUE_NAME, false, false, true, null);
        //向server发布一条消息
        //参数1：exchange名字，若为空则使用默认的exchange
        //参数2：routing key
        //参数3：其他的属性
        //参数4：消息体
        //RabbitMQ默认有一个exchange，叫default exchange，它用一个空字符串表示，它是direct exchange类型，
        //任何发往这个exchange的消息都会被路由到routing key的名字对应的队列上，如果没有对应的队列，则消息会被丢弃
        channel.basicPublish("", QUEUE_NAME, MessageProperties.TEXT_PLAIN, "hello river".getBytes());
        System.out.println("send success");
    }
}
